package cn.com.blueInfo.bpm.common.convert;

import cn.com.blueInfo.bpm.common.enums.BaseEnum;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.mapstruct.Named;

import java.util.List;

/**
 * 基础类型转换接口
 * @author suxch
 * @since 2025-08-22
 * @param <ENTITY>
 * @param <VO>
 */
public interface BaseConvert<ENTITY, DTO, VO> {

    ENTITY dtoToEntity(DTO dto);

    // 单个实体转换（由子类实现具体逻辑）
    VO entityToVO(ENTITY entity);

    // 列表转换（由子类实现具体逻辑）
    List<VO> entityListToVoList(List<ENTITY> entityList);

    List<ENTITY> dtoToEntity(List<DTO> dtoList);

    // 分页转换（通用逻辑，子类直接继承使用）
    default Page<VO> convertPage(Page<ENTITY> entityPage) {
        Page<VO> voPage = new Page<>();
        // 复制分页元数据（当前页、每页条数、总条数等）
        voPage.setCurrent(entityPage.getCurrent());
        voPage.setSize(entityPage.getSize());
        voPage.setTotal(entityPage.getTotal());
        voPage.setPages(entityPage.getPages());
        // 转换记录列表
        voPage.setRecords(entityListToVoList(entityPage.getRecords()));
        return voPage;
    }

    // 通用：枚举 -> 描述（适用于所有实现BaseEnum的枚举）
    @Named("enumToDesc")
    default <E extends BaseEnum<?>> String enumToDesc(E enumObj) {
        return enumObj != null ? enumObj.getDesc() : null;
    }

}
